# -*- coding: utf-8 -*-
# @Time    : 2021/9/2 15:16
# @Author  : BrandonGT
# @FileName: bd_logging.py

# 后续可以参考的方法：https://www.pythonf.cn/read/103979#_2

import logging


class BLogger(logging.Logger):
    """
    BrandonGT自定义logger生成器
    :param name: 自定义logger的名称（默认：Default）
    :param logger_level: 自定义logger全局的level（默认：DEBUG）
    :param file: 自定义是否在本地生成日志文件（默认：否）
    :param file_level: 自定义logger文件生成的level（默认：INFO）
    :param console:自定义是否在console面板返回日志（默认：是）
    :param path:自定义本地文件生成路径（默认：python文件根目录）
    """
    def __init__(self, name="Default", level=logging.DEBUG, file=False, file_level=logging.INFO, console=True, path=""):
        super().__init__(name, level)  # , file, file_level, console, path
        self.LOGGER = name
        self.LOGGER_LEVEL = level
        self.IS_FILE = file
        self.FILE_LEVEL = file_level
        self.IS_CONSOLE = console
        self.PATH = ("%s.log" % self.LOGGER) if path == "" else path  # 如果没有指定路径，则返回与logger name相同的文件名
        self.FORMATTER = "%(asctime)s %(name)s %(levelname)s %(message)s"
        self.DATE_FORMATTER = "%Y-%m-%d %H:%M:%S"
        self.set_logger()

    def set_logger(self):
        self.setLevel(self.LOGGER_LEVEL)  # 根据用户输入设置 logger level

        formatter = logging.Formatter(self.FORMATTER, self.DATE_FORMATTER)  # 设置formatter，并设置指定的日期显示格式

        # 添加文件处理器至logger
        if self.IS_FILE:
            file_handler = logging.FileHandler(self.PATH)  # 生成文件处理器
            file_handler.setLevel(self.FILE_LEVEL)  # 根据用户输入设置 file_handler level
            file_handler.setFormatter(formatter)
            self.addHandler(file_handler)

        # 添加console处理器至logger
        if self.IS_CONSOLE:
            stream_handler = logging.StreamHandler()
            stream_handler.setFormatter(formatter)
            self.addHandler(stream_handler)


"""

import os
import logging
import config.setting as bd_setting
from utils.Logging.bd_logging import BLogger


# ------------------ 定义log ------------------ 开始
_LOGGER = __name__  # 可以替换成自定义的名字
_LOGGER_LEVEL = logging.DEBUG  # 调整最低的log console显示级别
_IS_FILE = True  # 是否生成本地日志文件
_FILE_LEVEL = logging.INFO  # 调整最低的log文件记录级别
_IS_CONSOLE = True  # 是否在控制台打印
_PATH = os.path.join(bd_setting.LOG_PATH, "自定义名字先！.log")  # 根据需求修改本地log文件的命名
logger = BLogger(_LOGGER, level=_LOGGER_LEVEL, file=_IS_FILE, file_level=_FILE_LEVEL, console=_IS_CONSOLE, path=_PATH)
# ------------------ 定义log ------------------ 结束

logger.info(u"测试成功")

"""